function func():void{
    window.alert('123')
}
func()
//  匿名函数
var func1 = function():void{
    window.alert('1233')
}
func1()

var func2 = function():any{
    return 123
}
var num:number = func2()
console.log(num)

//  参数给定类型
function func3(name:string,age:number):string{
    return `${name}---${age}`
}
const info:string = func3('ywj',20)
console.log(info)

var func4 = function(name:string,age:number):string{
    return `${name}---${age}`
}
const info1:string = func4('ywj',20)
console.log(info1)



//  可选参数
//  可选参数必须放在参数中最后一个
function getInfo(name:string,age?:number):string{
    if(age){
        return `${name}---${age}`
    }else{
        return `${name}`
    }
}

const info2 = getInfo('ywj')
console.log(info2)


//  默认参数
function getInfo2(name:string,age:number=21):string{
    if(age){
        return `${name}---${age}`
    }else{
        return `${name}`
    }
}

const info3 = getInfo2('ywj',18)
console.log(info3)


//  方法的重载 参数个数一样
function getData(name:string):string;
function getData(age:number):string;
function getData(str:any):any{
    if(typeof str === 'string'){
        return '我叫'+str
    }else{
        return '我的年龄'+str
    }
}
console.log(getData('ywj'))
console.log(getData(20))

//  方法的重载 参数个数不一样
function getDatas(name:string,sex:string):string;
function getDatas(age:number):string;
function getDatas(str:any,sex?:any):any{
    if(sex){
        return '我叫'+str+'我的性别是'+sex
    }else{
        return '我的年龄'+str
    }
}
console.log(getDatas('ywj','男'))
console.log(getDatas(20))

//  剩余参数
//  ...运算符的使用
function sum(...result:number[]):number{
    var sum:number = 0
    for(var i=0;i<result.length;i++){
        sum += result[i]
    }
    return sum
}

console.log(sum(1,1,1,3,4,5))

//  箭头函数 
//  两种定义箭头函数的方法
let d:(name:string) => string
d = function(name:string):string{
    return '我叫'+name
}
console.log(d('ywj'))

type t = (name:string) => string
var f:t = function(name:string):string{
    return '我叫'+name
}
console.log(d('gou'))